iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
自我挑戰組

環島C一下自己的人生系列 第 17

[Day17]以陣列實做長整數的運算

  • 分享至 

  • xImage
  •  

將長整數儲存於一維陣列,長度為60位。
計算兩數的相加、相減。

輸入說明:
兩個小於60位數的數字

輸出說明
兩數的相加、相減結果

輸入範例:

74678186416540450856046456406565453745354346846
42541264516146186481412634534534535674461

輸出範例:
74678228957804967002232937819199988279890021307
74678143875275934709859974993930919210818672385


#include <stdio.h>
void math(int n1,int n2,char *num1,char *num2){
    int i,j,tmp;
    char *total;
    if(n1>n2){
        total=num1;
        for(i=n1-1,j=n2-1;i>=0&&j>=0;i--,j--){
            tmp=0;
            tmp=(num1[i]-48)+(num2[j]-48);
            if(tmp>9){
                total[i]=tmp-10;
                num1[i-1]=num1[i-1]+1;

            }
            else{
                total[i]=tmp;
            }
        }
    }
    for(i=0;i<n1-n2;i++){
        printf("%d",total[i]-48);
    }
    for(i=0+n1-n2;i<n1;i++){
        printf("%d",total[i]);
    }
    /*for(i=0;i<n1;i++){
        printf("%c",num1[i]);
    }
    printf("\n");
    for(i=0;i<n2;i++){
        printf("%c",num2[i]);
    }*/
}
void reduce(int n1,int n2,char *num3,char *num4){
    int i,j,tmp=0;
    char *less=num3;

    for(i=n1-1,j=n2-1;i>=0&&j>=0;i--,j--){
        if(num3[i]<num4[j]){
            num3[i-1]=num3[i-1]-1;
            less[i]=(num3[i]+10-48)-(num4[j]-48);
        }
        else{
            less[i]=(num3[i]-48)-(num4[j]-48);
        }
    }
    for(i=0;i<n1-n2;i++){
        printf("%d",less[i]-48);
    }
    for(i=0+n1-n2;i<n1;i++){
        printf("%d",less[i]);
    }
    /*for(i=0;i<n1;i++){
        printf("%c",num3[i]);
    }
    printf("\n");
    for(i=0;i<n2;i++){
        printf("%c",num4[i]);
    }*/
}
int main(){
    char num1[60]={0},num2[60]={0};
    char num3[60]={0},num4[60]={0};
    int i=0,n1=0,n2=0;

    for(i=0;i<60;i++){
        scanf("%c",&num1[i]);
        num3[i]=num1[i];
        n1++;
        if(num1[i]=='\n'){
            num1[i]=0;
            n1--;
            break;
        }
    }
    for(i=0;i<60;i++){
        scanf("%c",&num2[i]);
        num4[i]=num2[i];
        n2++;
        if(num2[i]=='\n'){
            num2[i]=0;
            n2--;
            break;
        }
    }
    math(n1,n2,num1,num2);
    printf("\n");
    reduce(n1,n2,num3,num4);

return 0;
}


上一篇
[Day16]數字迷宮
下一篇
[Day18]五子棋
系列文
環島C一下自己的人生24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言